//=============================================================================
/**
 * @file	map_attr.c
 * @brief	マップアトリビュート判定
 * @date	2005.12.15
 * @author	tamada GAME FREAK inc.
 */
//=============================================================================

#include <nitro.h>
#include "map_attr.h"

#include "gflib/assert.h"

//=============================================================================
//=============================================================================
//マップアトリビュート管理表から自動生成される定義テーブル
//各ソースでの参照は禁止する。
#include "../fielddata/mapattr/map_attr.h"

//マップアトリビュート管理表から自動生成される判定用テーブル
//各ソースでの参照は禁止する。
#include "../fielddata/mapattr/map_attr.dat"

//=============================================================================
//
//		アトリビュート判定関数定義
//
//
//	速度を考えてインライン関数定義されるものもある。
//=============================================================================
//--------------------------------------------------------------
///	マップアトリビュートチェック：草
//--------------------------------------------------------------
BOOL MATR_IsGrass(MATR matr)
{
	return (matr == MATTR_E_KUSA_1);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：長い草
//--------------------------------------------------------------
BOOL MATR_IsLongGrass(MATR matr)
{
	return (matr == MATTR_E_KUSA_2);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：カウンター
//--------------------------------------------------------------
BOOL MATR_IsCounter(MATR matr)
{
	return (matr == MATTR_COUNTER_1);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ドア
//--------------------------------------------------------------
BOOL MATR_IsDoor(MATR matr)
{
	return (matr == MATTR_MAT_10);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：右マット
//--------------------------------------------------------------
BOOL MATR_IsRightMat(MATR matr)
{
	return (matr == MATTR_MAT_03);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：左マット
//--------------------------------------------------------------
BOOL MATR_IsLeftMat(MATR matr)
{
	return (matr == MATTR_MAT_04);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上マット
//--------------------------------------------------------------
BOOL MATR_IsUpMat(MATR matr)
{
	return (matr == MATTR_MAT_05);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：下マット
//--------------------------------------------------------------
BOOL MATR_IsDownMat(MATR matr)
{
	return (matr == MATTR_MAT_06);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：右マット（矢印無し）
//--------------------------------------------------------------
BOOL MATR_IsRightNoArrowMat(MATR matr)
{
	return (matr == MATTR_MAT_13);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：左マット（矢印無し）
//--------------------------------------------------------------
BOOL MATR_IsLeftNoArrowMat(MATR matr)
{
	return (matr == MATTR_MAT_14);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上マット（矢印無し）
//--------------------------------------------------------------
BOOL MATR_IsUpNoArrowMat(MATR matr)
{
	return (matr == MATTR_MAT_15);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：下マット（矢印無し）
//--------------------------------------------------------------
BOOL MATR_IsDownNoArrowMat(MATR matr)
{
	return (matr == MATTR_MAT_16);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：水
//--------------------------------------------------------------
BOOL MATR_IsWater(MATR matr)
{
	return (MapAttributeData[matr] & MATTR_WATER_MASK) != 0;
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：滝裏(上段が水、下段が地面)
// WATERFALL_BACK
//--------------------------------------------------------------
BOOL MATR_IsWaterfallBack(MATR matr)
{
	return (matr == MATTR_WATERFALL_BACK);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：砂浜
//--------------------------------------------------------------
BOOL MATR_IsSand(MATR matr)
{
	return (matr == MATTR_SUNA_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：浅瀬
//--------------------------------------------------------------
BOOL MATR_IsShoal(MATR matr)
{
	return (matr == MATTR_ASASE_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上方向にジャンプ
//--------------------------------------------------------------
BOOL MATR_IsJumpUp(MATR matr)
{
	return (matr == MATTR_JUMP_03);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：下方向にジャンプ
//--------------------------------------------------------------
BOOL MATR_IsJumpDown(MATR matr)
{
	return (matr == MATTR_JUMP_04);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：左方向にジャンプ
//--------------------------------------------------------------
BOOL MATR_IsJumpLeft(MATR matr)
{
	return (matr == MATTR_JUMP_02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：右方向にジャンプ
//--------------------------------------------------------------
BOOL MATR_IsJumpRight(MATR matr)
{
	return (matr == MATTR_JUMP_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：パソコン
//--------------------------------------------------------------
BOOL MATR_IsPC(MATR matr)
{
	return	(matr == MATTR_PC_1);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：タウンマップ
//--------------------------------------------------------------
BOOL MATR_IsMap(MATR matr)
{
	return	(matr == MATTR_MAP_1);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：エスカレーター　折り返す
//--------------------------------------------------------------
BOOL MATR_IsEscalator(MATR matr)
{
	return (matr == MATTR_MAT_11);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：エスカレーター　折り返さない
//--------------------------------------------------------------
BOOL MATR_IsEscalatorNonRet(MATR matr)
{
	return (matr == MATTR_MAT_12);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：階段(右)
//--------------------------------------------------------------
BOOL MATR_IsRightStairs(MATR matr)
{
	return (matr == MATTR_MAT_17);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：階段(左)
//--------------------------------------------------------------
BOOL MATR_IsLeftStairs(MATR matr)
{
	return (matr == MATTR_MAT_18);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：氷
//--------------------------------------------------------------
BOOL MATR_IsIce(MATR matr)
{
	return (matr == MATTR_ICE_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：岩壁（上下）
//--------------------------------------------------------------
BOOL MATR_IsRockClimV(MATR matr)
{
	return (matr == MATTR_ROCKCLIM_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：岩壁（左右）
//--------------------------------------------------------------
BOOL MATR_IsRockClimH(MATR matr)
{
	return (matr == MATTR_ROCKCLIM_02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：小さい本棚1
//--------------------------------------------------------------
BOOL MATR_IsLittleBookRack01(MATR matr)
{
	return (matr == MATTR_LITTLERACK_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：小さい本棚2
//--------------------------------------------------------------
BOOL MATR_IsLittleBookRack02(MATR matr)
{
	return (matr == MATTR_LITTLERACK_02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：大きい本棚１
//--------------------------------------------------------------
BOOL MATR_IsBookRack01(MATR matr)
{
	return (matr == MATTR_BOOKRACK_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：大きい本棚２
//--------------------------------------------------------------
BOOL MATR_IsBookRack02(MATR matr)
{
	return (matr == MATTR_BOOKRACK_02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：つぼ
//--------------------------------------------------------------
BOOL MATR_IsPot(MATR matr)
{
	return (matr == MATTR_POT_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ゴミ箱
//--------------------------------------------------------------
BOOL MATR_IsTrashBox(MATR matr)
{
	return (matr == MATTR_TRASHBOX_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ショップ棚１
//--------------------------------------------------------------
BOOL MATR_IsShopBookRack01(MATR matr)
{
	return (matr == MATTR_SHOPRACK_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ショップ棚２
//--------------------------------------------------------------
BOOL MATR_IsShopBookRack02(MATR matr)
{
	return (matr == MATTR_SHOPRACK_02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ショップ棚３
//--------------------------------------------------------------
BOOL MATR_IsShopBookRack03(MATR matr)
{
	return (matr == MATTR_SHOPRACK_03);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：設計図
//--------------------------------------------------------------
BOOL MATR_IsBluePrint(MATR matr)
{
	return (matr == MATTR_BLUEPRINT_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：沼
//--------------------------------------------------------------
BOOL MATR_IsSwamp(MATR matr)
{
	return (matr == MATTR_SWAMP_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：雪
//--------------------------------------------------------------
BOOL MATR_IsSnow(MATR matr)
{
	return (matr == MATTR_SNOW_04);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：もっとも浅い雪
//--------------------------------------------------------------
BOOL MATR_IsMostShallowSnow(MATR matr)
{
	return (matr == MATTR_SNOW_04 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:洞窟
//--------------------------------------------------------------
BOOL MATR_IsDunFloor(MATR matr)
{
	return (matr == MATTR_E_ZIMEN_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:滝
//--------------------------------------------------------------
BOOL MATR_IsWaterFall(MATR matr)
{
	return (matr == MATTR_WATERFALL_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:うずしお
//--------------------------------------------------------------
BOOL MATR_IsUzusio(MATR matr)
{
	return (matr == MATTR_UZUSHIO_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上へ移動不可
//--------------------------------------------------------------
BOOL MATR_IsBadMoveUpCheck(MATR matr)
{
	return (matr == MATTR_IDOHUKA_03 || matr == MATTR_IDOHUKA_05 ||
			matr == MATTR_IDOHUKA_06 || matr == MATTR_IDOHUKA_09 ||
			matr == MATTR_HASHIGO01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：下へ移動不可
//--------------------------------------------------------------
BOOL MATR_IsBadMoveDownCheck(MATR matr)
{
	return (matr == MATTR_IDOHUKA_04 || matr == MATTR_IDOHUKA_07 ||
			matr == MATTR_IDOHUKA_08 || matr == MATTR_IDOHUKA_09 ||
			matr == MATTR_HASHIGO02);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：左へ移動不可
//--------------------------------------------------------------
BOOL MATR_IsBadMoveLeftCheck(MATR matr)
{
	return (matr == MATTR_IDOHUKA_02 || matr == MATTR_IDOHUKA_06 ||
			matr == MATTR_IDOHUKA_08 || matr == MATTR_IDOHUKA_10 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：右へ移動不可
//--------------------------------------------------------------
BOOL MATR_IsBadMoveRightCheck(MATR matr)
{
	return (matr == MATTR_IDOHUKA_01 || matr == MATTR_IDOHUKA_05 ||
			matr == MATTR_IDOHUKA_07 || matr == MATTR_IDOHUKA_10 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：水たまり
//--------------------------------------------------------------
BOOL MATR_IsPoolCheck(MATR matr)
{
	return (matr == MATTR_POOL_01||matr == MATTR_POOL_03);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：エンカウントアトリビュート
//--------------------------------------------------------------
BOOL MATR_IsEncount(MATR matr)
{
	if ((MapAttributeData[matr] & MATTR_ENCOUNT_MASK) != 0){
		return TRUE;
	} else {
		return FALSE;
	}
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：水エンカウントアトリビュート
//--------------------------------------------------------------
BOOL MATR_IsWaterEnc(MATR matr)
{
	return TRUE;
}


//--------------------------------------------------------------
///	マップアトリビュートチェック：TV
//--------------------------------------------------------------
BOOL MATR_IsTV(MATR matr)
{
	return (matr == MATTR_TV_1);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：映りこみ対象アトリビュート
//--------------------------------------------------------------
BOOL MATR_IsReflect(MATR matr)
{
	return (matr == MATTR_POOL_01||
			matr == MATTR_POOL_02||
			matr == MATTR_POOL_03||
			matr == MATTR_ICE_01||
			matr == MATTR_MIRROR);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：右方向へ強制移動
//--------------------------------------------------------------
BOOL MATR_IsForceMoveRight(MATR matr)
{
	return (matr == MATTR_IDO_01);
}
//--------------------------------------------------------------
///	マップアトリビュートチェック：左方向へ強制移動
//--------------------------------------------------------------
BOOL MATR_IsForceMoveLeft(MATR matr)
{
	return (matr == MATTR_IDO_02);
}
//--------------------------------------------------------------
///	マップアトリビュートチェック：上方向へ強制移動
//--------------------------------------------------------------
BOOL MATR_IsForceMoveUp(MATR matr)
{
	return (matr == MATTR_IDO_03);
}
//--------------------------------------------------------------
///	マップアトリビュートチェック：下方向へ強制移動
//--------------------------------------------------------------
BOOL MATR_IsForceMoveDown(MATR matr)
{
	return (matr == MATTR_IDO_04);
}
//--------------------------------------------------------------
///	マップアトリビュートチェック：強制移動解除
//--------------------------------------------------------------
BOOL MATR_IsForceMoveClear(MATR matr)
{
	return (matr == MATTR_STOP_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ワープポイント
//--------------------------------------------------------------
BOOL MATR_IsWarpPoint(MATR matr)
{
	return (matr == MATTR_MAT_08);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：橋フラグ
//--------------------------------------------------------------
BOOL MATR_IsBridgeFlag(MATR matr)
{
	return (matr == MATTR_BRIDGE);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：橋関連アトリビュート
//--------------------------------------------------------------
BOOL MATR_IsBridge(MATR matr)
{
	return( matr == MATTR_BRIDGE_GROUND ||
		matr == MATTR_BRIDGE_GROUND_E ||
		matr == MATTR_BRIDGE_WATER );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：橋＋地面
//--------------------------------------------------------------
BOOL MATR_IsBridgeGround(MATR matr)
{
	return( matr == MATTR_BRIDGE_GROUND ||
		matr == MATTR_BRIDGE_GROUND_E );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：橋＋海
//--------------------------------------------------------------
BOOL MATR_IsBridgeWater(MATR matr)
{
	return( matr == MATTR_BRIDGE_WATER );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：アトリビュート取得失敗
//--------------------------------------------------------------
BOOL MATR_IsNotAttr(MATR matr)
{
	return( matr == MATTR_NO_ATTR );
}

//--------------------------------------------------------------
///	マップアトリビュート取得：アトリビュート取得失敗
//--------------------------------------------------------------
MATR MATR_IsNotAttrGet(void)
{
	return( MATTR_NO_ATTR );
}

//--------------------------------------------------------------
///	マップアトリビュート取得：揺れの無い移りこみ
//--------------------------------------------------------------
BOOL MATR_IsMirrorReflect(MATR matr)
{
	return (matr == MATTR_MIRROR||matr == MATTR_POOL_03||matr==MATTR_ICE_01);
}

//--------------------------------------------------------------
///	マップアトリビュート取得：影が発生する雪
//--------------------------------------------------------------
BOOL MATR_IsShadowOnSnow(MATR matr)
{
	return (matr == MATTR_SNOW_05);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上り梯子表
//--------------------------------------------------------------
BOOL MATR_IsUpLadderFront(MATR matr)
{
	return( matr == MATTR_HASHIGO01 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：上り梯子裏
//--------------------------------------------------------------
BOOL MATR_IsUpLadderBack(MATR matr)
{
	return( matr == MATTR_HASHIGO02 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：下り梯子
//--------------------------------------------------------------
BOOL MATR_IsDownLadder(MATR matr)
{
	return( matr == MATTR_HASHIGO03 );
}

//--------------------------------------------------------------
///	マップアトリビュートチェック：ドラゴンジムマグマ
//--------------------------------------------------------------
BOOL MATR_IsMagma(MATR matr)
{
	return (matr == MATTR_MAGUMA_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:サファリ地面オブジェ配置可
//--------------------------------------------------------------
BOOL MATR_IsSafariGroundObjPlace(MATR matr)
{
	return (matr == MATTR_ZIMEN_01 || matr == MATTR_SUNA_01 || matr == MATTR_SWAMP_01);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:サファリ水上オブジェ配置可
//--------------------------------------------------------------
BOOL MATR_IsSafariWaterObjPlace(MATR matr)
{
	return MATR_IsWater(matr);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:サファリOBJ存在アトリビュートチェック
//--------------------------------------------------------------
BOOL MATR_IsSafariObjExist(MATR matr)
{
	return (matr == MATTR_SAFARI_OBJ);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:頭突きできる木
//--------------------------------------------------------------
BOOL MATR_IsWood(MATR matr)
{
	return (matr == MATTR_WOOD);
}

//--------------------------------------------------------------
///	マップアトリビュートチェック:連れ歩きの吹き出し出ない
//--------------------------------------------------------------
BOOL MATR_IsInvisibleBallon(MATR matr)
{
	if ( MATR_IsBridgeGround( matr ) || (matr == MATTR_POKE_HUKIDASHI) ){
		return TRUE;
	}

	return FALSE;
}